/*                          UX-Framework                               
 *                                                                 
 *  iZE Co.,Ltd. Copyright 2009 All rights reserved.          
 *  This file is distributed under the terms of the GNU Lesser 
 *  General Public License, described in file LICENSE.                                     
 */

package jp.ize.ux.components;
// {{{ imports
import jp.ize.ux.UXObject;
import jp.ize.ux.geom.UXPoint;
import jp.ize.ux.components.UXResource;
import jp.ize.ux.states.UXBasicState;
import jp.ize.ux.UXController;
import jp.ize.ux.UXInteraction;
// }}}
// {{{ class UXLineState extends UXBasicState
/**
 * UXLineState クラス<br>
 * UXLineの現在の状態を表すオブジェクトです。
 */
class UXLineState extends UXBasicState
{
	// {{{ public var p1(default, default) : UXPoint;
	/**
	 * このラインの始点を表すUXPointを示します。
	 */
	public var p1(default, default) : UXPoint;
	// }}}
	// {{{ public var p2(default, default) : UXPoint
	/**
	 * このラインの終点を表すUXPointを示します。
	 */
	public var p2(default, default) : UXPoint;
	// }}}
	// {{{ public function new( p1:UXPoint, p2:UXPoint ) : Void
	/**
	* コンストラクタ
	*/
	public function new( p1:UXPoint, p2:UXPoint ) : Void
	{
		super();
		this.p1 = p1;
		this.p2 = p2;
	}

	// }}}
}
// }}}

// {{{ class UXLine extends UXComponent
/** 
 * UXLine クラス<br>
 * 一本の線を描画するコンポーネントです。<br>
 * 
 *
 * @author		iZE Co., Ltd.<br>
 * @version		$Id: UXLine.hx 20 2009-02-04 08:23:19Z yimai.v $<br>
 */
class UXLine extends UXComponent<UXLineState>
{
	// {{{ public function new( width:Float, color:Int, p1:UXPoint, p2:UXPoint )
	/**
	 * コンストラクタです。
	 * 引数で与えられたp1,p2 を始点、終点とする線分を表示するインスタンスを構築します。
	 *
	 * @param width: 線幅を指定します。
	 * @param color: 線の描画色を指定します。
	 * @param p1: 描画開始座標を指定します。
	 * @param p2: 描画終了座標を指定します。
	 */
	public function new( width:Float, color:Int, p1:UXPoint, p2:UXPoint )
	{
		state = new UXLineState(p1,p2);
		state.target = this;
		ctrl = new UXController<UXLineState>( state );
		super(ctrl);
		graphics.lineStyle(width,color);
		graphics.moveTo(p1.x,p1.y);
		graphics.lineTo(p2.x,p2.y);
	}
	// }}}
	// {{{ public function update( updator : UXLineState -> Void ) : Void
	/**
	 * このコンポーネントの状態を直接変更するメソッドです。状態のどんな操作も可能になるので、
	 * このメソッドの使用には注意が必要です。
	 */
	public function update( updator : UXLineState -> Void ) : Void
	{
		updator( state );
	}
	// }}}
}
// }}}
